﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BaMusaSoft.RPS.DataModel.Repositories;
using BaMusaSoft.RPS.DataModel;
using BaMusaSoft.RPS.RPSServices;
using System.Windows.Input;
using BaMusaSoft.RPS.ViewModel.HelperClasses;
using System.ComponentModel;
using System.Windows.Data;
using BaMusaSoft.RPS.ViewModel.Properties;

namespace BaMusaSoft.RPS.ViewModel
{
    //public class ContractActivityViewModel:WorkspaceViewModel, IDataErrorInfo
    //{
    //    ContractActivityRepository repository;
    //    DelegateCommand saveCommand;
    //    DelegateCommand addCommand;
    //    DelegateCommand moveToNextCommand;
    //    DelegateCommand moveToPreviouesCommand;
    //    DelegateCommand moveToFirstCommand;
    //    DelegateCommand moveToEndCommand;
    //    //ContractActivity activity;
    //    public ContractActivityViewModel()
    //    {
    //        repository = new ContractActivityRepository(new SchedulesEntities());
    //        base.DisplayName = Resources.ContractActivityViewModel_DisplayName;
    //        ControlViewModelState(ViewModelActionToken.NewModelRequsted);
    //    }

    //    #region  "Properties"

    //    public ContractActivity Activity
    //    {
    //        get;
    //        set;
    //    }
    //    public string Description
    //    {
    //        get { return Activity.Description; }
    //        set
    //        {
    //            Activity.Description = value;
    //            NotifyPropertyChanged("Description");
    //        }
            
    //    }
    //    public ICollectionView Activities
    //    {
    //        get
    //        {
    //            return CollectionViewSource.GetDefaultView(repository.GetAll());
    //        }
    //    }
    //    #endregion


    //    #region "Commands"
    //    public ICommand SaveCommand
    //    {
    //        get
    //        {
    //            if (saveCommand == null)
    //            {
    //                saveCommand = new DelegateCommand(param => Save());
    //            }
    //            return saveCommand;
    //        }
    //    }
    //    void Save()
    //    {
    //        if (OkSave())
    //        {

    //            if (Activity.IsNew) repository.Add(Activity);
    //            try
    //            {

    //                repository.Save();
    //                ControlViewModelState(ViewModelActionToken.ModelSaved);

    //            }
    //            catch (Exception)
    //            {

    //                throw;
    //            }
    //        }
            
    //    }

    //    public ICommand AddCommand
    //    {
    //        get
    //        {
    //            if (addCommand == null)
    //            {
    //                addCommand = new DelegateCommand(param => AddActivity());
    //            }
    //            return addCommand;
    //        }
    //    }
    //    void AddActivity()
    //    {
    //        ControlViewModelState(ViewModelActionToken.NewModelRequsted);
    //    }

    //    public ICommand MoveToNextCommand
    //    {
    //        get
    //        {
    //            if (moveToNextCommand == null)
    //            {
    //                moveToNextCommand = new DelegateCommand(param => MoveToNext());
    //            }
    //            return moveToNextCommand;
    //        }
    //    }

    //    private void MoveToNext()
    //    {
    //        if (Activities.CurrentPosition < Activities.Cast<ContractActivity>().Count() - 1)
    //        {
    //            Activities.MoveCurrentToNext();
    //            ControlViewModelState(ViewModelActionToken.ModelFounded);
    //        }
    //    }
    //    public ICommand MoveToPreviousCommand
    //    {
    //        get
    //        {
    //            if (moveToPreviouesCommand == null)
    //            {
    //                moveToPreviouesCommand = new DelegateCommand(param => MoveToPrevious());
    //            }
    //            return moveToPreviouesCommand;
    //        }
    //    }

    //    private void MoveToPrevious()
    //    {
    //        if (Activities.CurrentPosition > 0)
    //        {
    //            Activities.MoveCurrentToPrevious();
    //            ControlViewModelState(ViewModelActionToken.ModelFounded);
    //        }
    //    }

    //    public ICommand MoveToFirstCommand
    //    {
    //        get
    //        {
    //            if (moveToFirstCommand == null)
    //            {
    //                moveToFirstCommand = new DelegateCommand(param => MoveToFirst());
    //            }
    //            return moveToFirstCommand;
    //        }
    //    }

    //    private void MoveToFirst()
    //    {
    //        Activities.MoveCurrentToFirst();
    //        ControlViewModelState(ViewModelActionToken.ModelFounded);
    //    }
    //    public ICommand MoveToEndCommand
    //    {
    //        get
    //        {
    //            if (moveToEndCommand == null)
    //            {
    //                moveToEndCommand = new DelegateCommand(param => MoveToEnd());
    //            }
    //            return moveToEndCommand;
    //        }
    //    }

    //    private void MoveToEnd()
    //    {
    //        Activities.MoveCurrentToLast();
    //        ControlViewModelState(ViewModelActionToken.ModelFounded);
    //    }
    //    #endregion


    //    #region "Base"
    //    public override bool ModelHasChanges
    //    {
    //        get
    //        {
    //            return repository.HasChanges;
    //        }
    //    }
    //    protected override void OnDispose()
    //    {
    //        repository.Dispose();
    //    }
    //    #endregion

    //    #region "Helper Methods"
    //    private void ControlViewModelState(ViewModelActionToken actionToken)
    //    {
    //        switch (actionToken)
    //        {
    //            case ViewModelActionToken.NewModelRequsted:
    //                ClearAllErrors();
    //                Activity = new ContractActivity();
    //                State = ViewModelState.New;
    //                NotifyPropertyChanged("Description");
    //                NotifyPropertyChanged("Activities");
    //                break;
    //            case ViewModelActionToken.ModelSaved:
    //                State = ViewModelState.Existed;
    //                NotifyPropertyChanged("Activities");
    //                break;
    //            case ViewModelActionToken.ModelFounded:
    //                Activity = (ContractActivity) Activities.CurrentItem;
    //                NotifyPropertyChanged("Description");
    //                NotifyPropertyChanged("Activities");
    //                State = ViewModelState.Existed;
    //                break;
    //            default:
    //                break;
    //        }
    //    }

    //    bool OkSave()
    //    {
    //        ClearAllErrors();
    //        bool okSave = true;
    //        var results = DomainValidator.Validate<ContractActivity>(Activity);
    //        if (!results.IsValid)
    //        {
    //            okSave = false;
    //            foreach (var error in results)
    //            {
    //                SetError(error.Key, error.Message);
    //            }

    //        }
    //        return okSave;
    //    }
        
    //    #endregion
    //    #region "IDataErrorInfo"
    //    Dictionary<string, string> errors = new Dictionary<string, string>();
    //    void SetError(string propertyName, string errorMessage)
    //    {
    //        errors[propertyName] = errorMessage;
    //        NotifyPropertyChanged(propertyName);
    //    }
    //    void ClearError(string propertyName)
    //    {
    //        errors.Remove(propertyName);
    //    }
    //    void ClearAllErrors()
    //    {
    //        List<string> proeprties = new List<string>();
    //        foreach (var error in errors)
    //        {
    //            proeprties.Add(error.Key);
    //        }
    //        errors.Clear();
    //        foreach (var property in proeprties)
    //        {
    //            NotifyPropertyChanged(property);
    //        }
    //    }
    //    public string Error
    //    {
    //        get { return null; }
    //    }

    //    public string this[string columnName]
    //    {
    //        get 
    //        {
    //            if (errors.ContainsKey(columnName))
    //            {
    //                return errors[columnName];
    //            }
    //            return string.Empty;
    //        }
    //    }
    //    #endregion
    //}
}
